﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Transport.Properties;
using System.IO;
using System.IO.Pipes;
using Main.Transport;
using System.Threading;
using Main;
using Core.Connexions;

namespace Transport
{
    static class Program
    {
        static Thread threadLireDeReseau;

        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        static void Main()
        {
            //On supprime les fichiers qui peuvent contenir des données d'une exécution précédente
            File.Delete(REGLES.S_ECRITURE);

            //Instanciation des threads et démarrage
            CoucheTransport coucheTransport = new CoucheTransport();
            threadLireDeReseau = new Thread(coucheTransport.LireDeReseau);

            Console.WriteLine("Demarrage : Lire de Reseau");
            threadLireDeReseau.Start();

            //Démarrage de la méthode à être exécutée par le processus principal
            Console.WriteLine("Demarrage : Ecrire vers Reseau");
            coucheTransport.EcrireVersReseau();

            //On attend que le canal soit vide de toutes données avant d'arrêter les threads
            Console.WriteLine("Attente que le pipe TRANSPORT_TO_RESEAU soit vide");
            coucheTransport.pipeTransportToReseau.WaitForPipeDrain();
            threadLireDeReseau.Abort();

            //Déconnexion et fermeture des canaux
            coucheTransport.pipeReseauToTransport.Dispose();

            coucheTransport.pipeTransportToReseau.Disconnect();
            coucheTransport.pipeTransportToReseau.Close();

            Console.WriteLine("Simulation terminee, appuyez sur une touche pour quitter...");
            Console.ReadKey();
            Environment.Exit(0);
        }
    }
}
